package com.gitee.dprecated.state;

import com.gitee.dprecated.observer.AbstractOrderObserver;
import com.gitee.dprecated.observer.OrderStateEnum;

import java.util.ArrayList;
import java.util.List;

/**
 * 商品订单状态转化与处理 抽象被观察者类
 * 观察者类：观察者类有2个工作：
 * 1、添加和删除观察者
 * 2、通知消息到观察者类
 *
 * @author acao
 * @since 2023-11-07 09:56
 */
public abstract class AbstractOrder {

    protected final List<AbstractOrderObserver> observersList = new ArrayList<>();

    /**
     * 添加观察者
     */
    abstract void addOrderObserver(AbstractOrderObserver orderObserver);

    /**
     * 删除观察者
     */
    abstract void removeOrderObserver(AbstractOrderObserver orderObserver);

    /**
     * 通知消息到观察者
     */
    public void notifyObserver(String orderId, OrderStateEnum orderStateEnum) {
        for (AbstractOrderObserver observer : this.observersList) {
            observer.notifyPayState(orderId, orderStateEnum);
        }
    }
}
